#ifndef PARSTEMCELL_H
#define PARSTEMCELL_H

#include "string"
#include "iostream"
#include "string"
#include "set"

class PARStemCell
{
public:
    double beta0, kappa0, a1, a2, a3, a4, b1, eta, d1, d2;
    double mu0, tau, c1;
    double theta0;
    double alpha1, alpha2;
    double lambda;
    double phi0,z0;

    bool IsMutated = false;

    std::set<int> gene_record;

    PARStemCell() : beta0(0.0), kappa0(0.0), a1(0.0), a2(0.0), a3(0.0), a4(0.0), b1(0.0), eta(0.0), d1(0.0), d2(0.0),
                    mu0(0.0), tau(0.0), c1(0.0), theta0(0.0), alpha1(0.0), alpha2(0.0), lambda(0.0), phi0(0.0), z0(0.0) {}

    // 拷贝构造函数
    PARStemCell(const PARStemCell& other);

    ~ PARStemCell(){
    }
    PARStemCell& operator=(const PARStemCell& other); 
    double calcDistance( PARStemCell & sys_par );

    // get par's position
    double& getPar(int index);

    // read parament's value
    void readPar(std::string fpar);

    void printAllElements(std::string msg = "-------------------") const;

};   // System parameters

#endif //PARSTEMCELL_H
